//cf

//https://codeforces.com/contest/1605/problem/B


//前缀和,后缀和



// #include<bits/stdc++.h>
// using namespace std;
// #define all(x) (x).begin(),(x).end()
// #define rall(x) (x).rbegin(),(x).rend()
// const int N=2e5+10;
// #define INF 0x3f3f3f3f;
// typedef long long int ll;
// #define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
// //----------------------------------------------------------------------------//
// int pre[1010],suf[1010],a[1010],suf0[1010];
// void solve()
// {
// 	int n;
// 	cin>>n;

// 	string s;
// 	cin>>s;
// 	s=' '+s;
// 	//cout<<s<<'\n';

// 	bool ok=true;
// 	for(int i=2;i<=n;i++)
// 	{
// 		if(s[i]<s[i-1]) {ok=false;break;}
// 	}

// 	if(ok) {cout<<0<<'\n';return;}


// 	cout<<1<<'\n';


// 	// int pos=0;
// 	// for(int i=1;i<=n;i++) if(suf[i+1]==0) {pos=i;break;}//pos+1到n都没有1了

// 	// int sz=0;
// 	// if(pos!=n) sz=min(pre[pos],suf0[pos+1]);
// 	// else sz=n;

// 	// for(int i=1;i<=pos;i++)
// 	// {
// 	// 	if(pos1.size()==sz) break;
// 	// 	if(a[i]==1) pos1.insert(i);
// 	// }

// 	// for(int i=n;i>pos;i--)
// 	// {
// 	// 	if(pos0.size()==pos1.size()) break;
// 	// 	if(a[i]==0) pos0.insert(i);
// 	// }

// 	// if(pos0.size()!=0) cout<<2*pos1.size()<<" ";
// 	// else cout<<pos1.size()<<" ";
// 	// for(auto&k:pos1) if(k!=n) cout<<k<<" ";
// 	// for(auto&k:pos0) cout<<k<<" ";
// 	// cout<<'\n';

// 	int last=n;
// 	for(int i=n-1;i>=1;i--)
// 	{
// 		if(a[i+1]==a[i]&&a[i]==1) last=i-1;
// 		else break;
// 	}

// 	for(int i=1;i<=n;i++) a[i]=s[i]-'0';

// 	for(int i=1;i<=last;i++)
// 	{
// 		pre[i]=pre[i-1]+a[i];//1的数量
// 	}

// 	for(int i=last;i>=1;i--)
// 	{
// 		if(a[i]==1) suf[i]=suf[i+1]+1;
// 		else suf[i]=suf[i+1];

// 		if(a[i]==0) suf0[i]=suf0[i+1]+1;
// 		else suf0[i]=suf0[i+1];
// 	}

// 	int pos=1;
// 	for(int i=1;i<=last;i++) if(suf[i+1]==0) {pos=i;break;}//pos+1到n都没有1了

// 	set<int> pos1;//存前面1的个数
// 	set<int> pos0;//存后面0的下标

// 	for(int i=1;i<=pos;i++)
// 	{
// 		if(pos1.size()==pre[pos]) break;
// 		if(a[i]==1)
// 		{
// 			if(i==pos&&pre[pos]-1==suf0[pos+1]) break;
// 			pos1.insert(i);
// 		}
// 	}

// 	for(int i=last;i>pos;i--)
// 	{
// 		if(pos0.size()==pre[pos]) break;
// 		if(a[i]==0) pos0.insert(i);
// 	}

// 	cout<<pos0.size()+pos1.size()<<" ";
// 	for(auto&k:pos1) cout<<k<<" ";
// 	for(auto&k:pos0) cout<<k<<" ";
// 	cout<<'\n';


// }

// int main()
// {
// 	close();
// 	int T; cin>>T;
// 	while (T--) solve();
// 	return 0;
// }
// //01串,一次操作是选取一个非升序子序列，将其翻转,几次操作能将01串变成非降序



// #include<bits/stdc++.h>
// using namespace std;
// #define all(x) (x).begin(),(x).end()
// #define rall(x) (x).rbegin(),(x).rend()
// const int N=2e5+10;
// #define INF 0x3f3f3f3f;
// typedef long long int ll;
// #define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
// //----------------------------------------------------------------------------//

// void solve()
// {




// }

// int main()
// {
// 	close();
// 	int T; cin>>T;
// 	while (T--) solve();
// 	return 0;
// }





//cf

//https://codeforces.com/contest/1605/problem/B


//前缀和,后缀和



// #include<bits/stdc++.h>
// using namespace std;
// #define all(x) (x).begin(),(x).end()
// #define rall(x) (x).rbegin(),(x).rend()
// const int N=2e5+10;
// #define INF 0x3f3f3f3f;
// typedef long long int ll;
// #define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
// //----------------------------------------------------------------------------//
// int pre[1010],suf[1010],a[1010];
// void solve()
// {
// 	int n;
// 	cin>>n;

// 	string s;
// 	cin>>s;
// 	s=' '+s;
// 	//cout<<s<<'\n';

// 	bool ok=true;
// 	for(int i=2;i<s.size();i++)
// 	{
// 		if(s[i]<s[i-1]) {ok=false;break;}
// 	}

// 	if(ok) {cout<<0<<'\n';return;}


// 	cout<<1<<'\n';
// 	for(int i=1;i<s.size();i++) a[i]=s[i]-'0';

// 	for(int i=1;i<s.size();i++)
// 	{
// 		pre[i]=pre[i-1]+a[i];//1的数量
// 	}

// 	for(int i=s.size()-1;i>=1;i--)
// 	{
// 		if(a[i]==0) suf[i]=suf[i+1]+1;
// 		else suf[i]=suf[i+1];
// 	}

// 	for(int i=1;i<=s.size()-1;i++)
// 	{
// 		if(pre[i-1]==suf[i+1])
// 		{
// 			cout<<pre[i-1]*2<<" ";
// 			for(int j=1;j<=i-1;j++)
// 			{
// 				if(a[j]==1) cout<<j<<" ";
// 			}

// 			for(int j=i+1;j<s.size();j++)
// 			{
// 				if(a[j]==0) cout<<j<<" ";
// 			}
// 			cout<<'\n';
// 			return;
// 		}
// 	}

// }

// int main()
// {
// 	close();
// 	int T; cin>>T;
// 	while (T--) solve();
// 	return 0;
// }
// //01串,一次操作是选取一个非升序子序列，将其翻转,几次操作能将01串变成非降序




//模拟

#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int N = 2e5 + 10;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
//----------------------------------------------------------------------------//
int a[1100];
void solve()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++i)
    {
        char ch;
        cin >> ch;
        a[i] = (int)(ch - '0');
    }

    int l=1,r=n;
    while(l<=n&&a[l]==0) l++;
    while (r>=1&&a[r]==1) r--;

    vector<int> res1,res0;
    while(l<=r)
    {
    	res0.push_back(r);
    	res1.push_back(l);
    	swap(a[l],a[r]);
    	while(l<=n&&a[l]==0) l++;
    	while(r>=1&&a[r]==1) r--;
    }

    reverse(all(res0));
    if(res1.empty()&&res0.empty()) cout<<0<<'\n';
    else
    {
    	cout<<1<<'\n';
    	cout<<res1.size()+res0.size()<<" ";
    	for(auto&k:res1) cout<<k<<" ";
    	for(auto&k:res0) cout<<k<<" ";
    	cout<<'\n';
    }
	

}

int main()
{
    close();
    int T;
    cin >> T;
    while (T--) solve();
    return 0;
}
